package cards;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;

/**
 * Created by IntelliJ IDEA.
 * User: ilya
 * Date: 21.05.11
 * Time: 10:21
 */
public class CardsExample extends JFrame {

    //этот список будет хранить колоду карт
    private ArrayList<Card> cards = new ArrayList<Card>();
    //это метки, в которых будет написан текст
    private JLabel[][] labels = new JLabel[13][4];

    public static void main(String[] args) {
        new CardsExample();
    }

    public CardsExample() {
        //этот метод решает задачу 1, т.е. создает колоду карт
        createDeck();

        //вызываем метод, который добавляет все элементы интерфейса
        initInterface();

        //этот метод заменяет setSize()
        //он самостоятельно выбирает размер окна в соответствии с его содержимым
        //setSize(800, 600);
        pack();

        setLocationRelativeTo(null);
        setTitle("Задача про карты");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    private void initInterface() {
        //Создадим панель, на которой будут располагаться карты
        JPanel cardsPanel = new JPanel();
        //эта кнопка тасует колоду
        JButton shuffleButton = new JButton("Перетасовать");

        //расоложим элементы на окне
        setLayout(new BorderLayout());
        add(cardsPanel, BorderLayout.CENTER);
        add(shuffleButton, BorderLayout.SOUTH);

        //создадим метки и расположим на панельке

        cardsPanel.setLayout(new GridLayout(13, 4));

        for (int i = 0; i < 13; i++)
            for (int j = 0; j < 4; j++) {
                labels[i][j] = new JLabel();
                cardsPanel.add(labels[i][j]);
            }

        //этот метод пишет названия карт в метках
        placeCards();

        //добавляем обработчик события нажатия на кнопку
        shuffleButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //тасуем карты
                Collections.shuffle(cards);
                //располагаем карты на поле
                placeCards();

                saveToFile(); //сохраняем колоду в файл
            }
        });
    }

    private void placeCards() {
        //номер карты в колоде
        int cardIndex = 0;

        for (int i = 0; i < 13; i++)
            for (int j = 0; j < 4; j++) {
                labels[i][j].setText(
                        cards.get(cardIndex).toString()
                );

                cardIndex ++;
            }
    }

    private void createDeck() {
        for (int suit = 1; suit <= 4; suit++)
            for (int price = 2; price <= 14; price++)
                cards.add(new Card(suit, price));

        //тасуем колоду
        Collections.shuffle(cards);

        //выводим колоду на экран
        for (Card card : cards)
            System.out.println(card);

        saveToFile(); //сохраняем колоду в файл
    }

    private void saveToFile() {
        PrintStream out = null;
        try {
            out = new PrintStream("cards.out");

            for (Card card : cards)
                out.println(card);

        } catch (FileNotFoundException e) {
            System.out.println("Не удалось сохранить в файл");
        } finally {
            if (out != null)
                out.close();
        }

        //запустить список карт в блокноте\

        //для ubuntu linux
        try {
            Runtime.getRuntime().exec("gedit cards.out");
            //Runtime.getRuntime().exec("notepad.exe cards.out"); - вариант для Windows
        } catch (IOException e) {
            //ничего не делать, если ошибка
        }
    }

}
